#include<cstdio>
#include<iostream>
#include<stdlib.h>
#include<malloc.h>
#include<cmath>
#define MaxSize 50
#define INITSIZE 100
//#define OVERFLOW -1
using namespace std;
typedef int ElemType; 
	typedef struct
{
	ElemType *data;
	int length;
}SqList;
	void InitList (SqList &L)
	{

		L.data=new ElemType[MaxSize];
		L.length=0;
}
	void CreateList(SqList &L)
	{
		int  i,N;
		cout << "请输入顺序表元素的个数:";
		cin>>N;

		for(i=0;i<N;i++)
		{
			cin>> L.data[i];
			L.length++;
		}
	}
	void DispList(SqList &L)
	{
		for (int i=0;i<L.length;i++)
			cout<< L.data[i]<<' ';
		cout<<'\n';
	}
void ListInsert (SqList &L,int i,int e)
{
     for(int j=L.length;j>i-1;j--)
		 L.data[j]=L.data[j-1];
	 L.data[i-1]=e;
	 L.length++;
}
void GetElem(SqList L,int i,int e)
{
	e=L.data[i-1];
	cout<<e<<'\n';
}
void GetElemMAX(SqList L,int e)
{
	for(int i=0;i<L.length;i++)
	{
		e=max(L.data[i],e);
	}
    cout<<e<<'\n';
}
void ListDelete(SqList &L ,int i)
{
	for(int j=i-1;j<L.length-1;j++)
		L.data[j]=L.data[j+1];
	L.length--;
}
void ListSort(SqList &L)
{
	int p,i,j;
	for( i=0;i<L.length;i++)
		for( j=i;j<L.length;j++)
		{
			if(L.data[i]>L.data[j])
			{
				p=L.data[j];
				L.data[j]=L.data[i];
				L.data[i]=p;
			}
		}
}
void ListNixu(SqList &L)
{
	int t;
	int i;
	for(i=0;i<L.length/2;i++)
	{
		t=L.data[i];
		L.data[i]=L.data[L.length-i-1];
		L.data[L.length-i-1]=t;
	}
	
}
int main()
{

	SqList L;
	ElemType e,n;
	char c;
	cout<<"线性表初始化:"<<'\n';
	InitList (L);
	cout<<"初始化成功: "<<'\n';
	CreateList (L);
	cout<<"输出线性表:"<<'\n';
	DispList(L);
	cout<<"请输入获取元素的位置"<<'\n';
	cin>>n;
	cout<<"该元素为"<<'\n';
	GetElem(L,n,e);
	cout<<"请输入字符'M'来获取顺序表中的最大值"<<'\n';
	cin>>c;
	cout<<"最大元素为"<<'\n';
	GetElemMAX(L,e);
	cout<<"请输入插入元素位置n和插入的元素e"<<'\n';
	cin>>n>>e;
	ListInsert(L,n,e);
	cout<<"输出线性表:"<<'\n';
	DispList(L);
	cout<<"请输入要删除的元素位置n"<<'\n';
	cin>>n;
	ListDelete(L,n);
	cout<<"输出线性表:"<<'\n';
	DispList(L);
	cout<<"请输入字符'S'将顺序表升序排列"<<'\n';
	cin>>c;
	ListSort(L);
	cout<<"输出线性表:"<<'\n';
	DispList(L);
	cout<<"请输入字符'N'将顺序表原地逆序"<<'\n';
	cin>>c;
	ListNixu(L);
	cout<<"输出线性表:"<<'\n';
    DispList (L);
    cout<<"experiment over"<<'\n';
	return  0;
}
